#include "substitutions/operator_pattern/operator_attribute_key.h"

namespace FlexFlow {

// This should probably be integrated into proj,
// tracked in https://github.com/flexflow/FlexFlow/issues/1478
std::vector<OperatorAttributeKey> all_operator_attribute_keys() {
  return {
      OperatorAttributeKey::OP_TYPE,
      OperatorAttributeKey::USE_BIAS,
      OperatorAttributeKey::GROUPS,
      OperatorAttributeKey::POOL_TYPE,
      OperatorAttributeKey::KERNEL_H,
      OperatorAttributeKey::KERNEL_W,
      OperatorAttributeKey::DATA_TYPE,
      OperatorAttributeKey::SCALAR,
      OperatorAttributeKey::STRIDE_H,
      OperatorAttributeKey::STRIDE_W,
      OperatorAttributeKey::PADDING_H,
      OperatorAttributeKey::PADDING_W,
      OperatorAttributeKey::AGGR,
      OperatorAttributeKey::NUM_ENTRIES,
      OperatorAttributeKey::OUT_CHANNELS,
      OperatorAttributeKey::ACTIVATION,
      OperatorAttributeKey::NUMDIM,
      OperatorAttributeKey::AXIS,
      OperatorAttributeKey::PERMUTATION,
      OperatorAttributeKey::OUTSHUFFLE,
      OperatorAttributeKey::MERGE_GCONV_COUNT,
      OperatorAttributeKey::AXES,
      OperatorAttributeKey::KEEP_DIMS,
      OperatorAttributeKey::EPSILON,
      OperatorAttributeKey::PARALLEL_OP_DIM,
      OperatorAttributeKey::PARALLEL_OP_DEGREE,
      OperatorAttributeKey::SOFTMAX_DIM,
      OperatorAttributeKey::NUM_HEADS,
      OperatorAttributeKey::PARALLEL_DIM,
      OperatorAttributeKey::PARALLEL_DEGREE,
      OperatorAttributeKey::PAD,
      OperatorAttributeKey::EMBED_DIM,
      OperatorAttributeKey::KDIM,
      OperatorAttributeKey::VDIM,
      OperatorAttributeKey::DROPOUT,
      OperatorAttributeKey::BIAS,
      OperatorAttributeKey::ADD_BIAS_KV,
      OperatorAttributeKey::ADD_ZERO_ATTN,
      OperatorAttributeKey::A_SEQ_LENGTH_DIM,
      OperatorAttributeKey::B_SEQ_LENGTH_DIM,
      OperatorAttributeKey::RELU,
      OperatorAttributeKey::TARGET_DIMS,
      OperatorAttributeKey::RATE,
      OperatorAttributeKey::SEED,
      OperatorAttributeKey::SHOULD_BROADCAST_LHS,
      OperatorAttributeKey::SHOULD_BROADCAST_RHS,
      OperatorAttributeKey::DIM,
      OperatorAttributeKey::ELEMENTWISE_AFFINE,
      OperatorAttributeKey::REGULARIZER,
      OperatorAttributeKey::SHAPE,
      OperatorAttributeKey::SPLITS,
      OperatorAttributeKey::K,
      OperatorAttributeKey::SORTED,
      OperatorAttributeKey::COMBINE_DIM,
      OperatorAttributeKey::COMBINE_DEGREE,
      OperatorAttributeKey::NUM_INPUTS,
  };
}

} // namespace FlexFlow
